<?php
namespace Pay\Controller;
use Common\Controller\HomebaseController;
/**
 * 微信支付：包括 "微信扫码支付" 和 "微信公众号支付"
 * date: 2016.11.25
 * author： hongweizhiyuan
 */
class WeixinpayController extends HomebaseController{

    /**
	 * ======微信扫码支付==================================================================================================
	 *
     * 功能：微信扫码支付-测试数据
	 * 作用：查看是还是接通
	 * 测试地址： baicheng.cc/index.php?g=pay&m=weixinpay&a=weixinpay_qrcode_test
     */
    public function weixinpay_qrcode_test(){
        // 此处根据实际业务情况生成订单 然后拿着订单去支付
	
        // 虚拟的订单 请根据实际业务更改
        $time=time();
        $order=array(
            'body'=>'test',
            'total_fee'=>1,
            'out_trade_no'=>strval($time),
            'product_id'=>1
        );
			
        weixinpay($order);
    }
	
	/**
     * 功能：微信扫码支付 - 正式数据
	 * 测试地址： baicheng.cc/index.php?g=pay&m=weixinpay&a=weixinpay_qrcode_test
     */
    public function weixinpay_qrcode(){
        // 此处根据实际业务情况生成订单 然后拿着订单去支付
	
        // 虚拟的订单 请根据实际业务更改
        $order_sn=get_order_sn();
        $order=array(
			'body'=>I('goods_name'), 
			'total_fee'=>intval(I('total_price')*100),
			'out_trade_no'=>strval($order_sn),
			'product_id'=>I('good_id') 
		);
		$ordertest=array( 
			'body'=>'test', 
			'total_fee'=>1, 
			'out_trade_no'=>strval($time),
			'product_id'=>1 
		);
        weixinpay($order);
    }
	
	
	/**
	 * =====微信公众号支付===============================================================================================================
	 *
     * 功能：微信公众号 jssdk 支付
     * 测试地址： http://4000351999.com/Pay/Weixinpay/weixinpay_js
     */
	public function weixinpay_js(){
        // 此处根据实际业务情况生成订单 然后拿着订单去支付

        // 用时间戳虚拟一个订单号  （请根据实际业务更改）
        $out_trade_no=time();
        // 组合url
        $url=U('Pay/Weixinpay/pay',array('out_trade_no'=>$out_trade_no));
        // 前往支付
        redirect($url);
    }
	
	
	
    /**
     * 功能：公众号支付 必须以get形式传递 out_trade_no 参数
	 * 说明：相关数据在 vendor/weixinapy/weixinpay.php 的 getParameters 中
     */
    public function pay(){
    	$pay_success_redirect_to = base64_decode(urldecode(I('redirect_url')));
    	cookie('pay_success_redirect_to', $pay_success_redirect_to);
    	
        // 导入微信支付sdk
        $wxpay=new \Pay\Lib\Weixinpay();
        // 获取jssdk需要用到的数据
        $data=$wxpay->getParameters();
        
        if (empty($data)) {
        	$this -> error('支付失败,订单数据查询失败!');
        }
        // 将数据分配到前台页面
        $assign=array(
            'data'=>json_encode($data)
        );

        $this -> assign('redirect_url', cookie('pay_success_redirect_to'));
        $this->assign($assign);
        $this->display();
    }



    /**
     * 功能：notify_url接收页面
	 * 测试地址： http://xxx.com/Pay/Weixinpay/notify
     */
	public function notify(){
		// Vendor('Weixinpay.Weixinpay');
		// $wxpay=new \Weixinpay();
		$wxpay=new \Pay\Lib\Weixinpay();
		$result=$wxpay->notify();
		if ($result) {
			file_put_contents('/alidata/www/www_shuyuan/data/wx.txt', 'success:'.var_export($result,TRUE)."\n", FILE_APPEND);
			// 验证成功 修改数据库的订单状态等 $result['out_trade_no']为订单号
			if ($result['result_code'] == 'SUCCESS') {
				//写入支付状态表
				$update_array = array(
					'order_no' => $result['out_trade_no'],
					'amount' => $result['total_fee'],
					'status' => 1,
					'trade_no' => $result['transaction_id'],
					'payfrom' => $result['openid'],
					'time' => $result['time_end'],
					'data' => array(
						'amount' => $result['total_fee'],
					),
				);
				$paystatus = D('PayStatus') -> updateStatus($update_array);
				
				//调起订单接口的更新订单状态
				$paystatus && \Mall\Lib\OrderLib::paySuccessOrderOperator($result['out_trade_no']);//传入order_id和order_no都可以
			} elseif ($result['result_code'] == 'FAIL') {
				
			}
		} else {
			file_put_contents('/alidata/www/www_shuyuan/data/wx.txt', 'failed:'.var_export($result,TRUE)."\n", FILE_APPEND);
		}
	}
	
	
}